Chef を始める #2 – Chef Server に Node を追加して Recipe を実行する
前回 は、Chef Server のインストールと、Workstation のセットアップまで行いました。
今回は、Node を Chef Server に登録して Recipe を実行するところまでやってみたいと思います。
Node の準備
新たに Node 用の EC2 インスタンスを立ち上げ、セキュリティグループで ssh を許可しておきます。
OS は Amazon Linux、インスタンスタイプは t1.micro で試しました。
Chef Client のインストール
EC2 にログインしたら、最初に Chef Client をインストールします。
前回は、RubyGems を使ってインストールを行いましたが、以下の方式でもインストール可能です。
$ sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash $ chef-client -v Chef: 11.4.0
インストールが終わったら、knfie コマンドでクライアントの設定を行います。
-s には、 Chef Server の URL を指定します。
$ sudo mkdir /etc/chef && cd /etc/chef $ sudo knife configure client -s https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com ./
コマンドを実行すると、 上記で指定した Cherf Sever の URL やログ情報が記載された client.rb と validation.pem いうファイルが作られます。
$ ls client.rb validation.pem
client.rb を開き、node_name を追記します。
node_name は、Chef Server への認証時に使用される名前です。
$ sudo vim client.rb log_level :info log_location STDOUT chef_server_url 'https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com' validation_client_name 'chef-validator' node_name 'web-server'
次に、validation.pem を開き、Chef Server 上にある chef-validator.pem の内容をコピーします。
これは Node の登録時に、最初のみ chef-validator クライアントの証明書を借りるために必要な作業です。
chef-validator は新しいクライアントを登録するための特別なクライアントです。
$ sudo vim validation.pem -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAuVC+mEkuYsT/RWYvJ+PuOQbE022BXNFFZ+rHMUcmWQXtIgwu MqaJonSVIWAYrwqYmZwrb0dKLuHXd8C+3ICnmZy9dQ0LKTaRPSFGhfeDxTQjlwfK AdXlRrXAzvmqPXC3yuBGY9XL1wOzYZaCjjWxx2aYtFpQv2RLr/mXvl+vSsYO4hpA ..... -----END RSA PRIVATE KEY-----
Chef Server に Node として登録する
上記の手順が終わったら、以下のコマンドでこの EC2 インスタンスを Node としてChef Server 登録します。
$ sudo chef-client -c client.rb
実行後、client.pem が保存されているのが分かると思います。
以降は、この証明書を使って Chef Server に認証する形になります。
$ ls client.pem client.rb validation.pem
ブラウザで Chef Server を開くと、Node List と Client に登録されていることが分かりますね。
Workstation から Node に Run List を適用する
Run List は、Node に対してどんな Recipe や Role を適用するかのリストです。
Workstation から、この Run List を Workstaion 経由で、Node に適用します。
Cookbook の取得
今回使う Cookbook として、opscode の github に getting-started という非常に簡単なサンプルがありますので、これを Workstation 上に clone します。
$ cd ~/chef/chef-repo/cookbooks $ git clone https://github.com/opscode-cookbooks/getting-started
clone した Cookbook の中身を確認すると、recipes ディレクトリの中に default.rb というファイルがあります。
このファイルに実際の Recipe が記述されていますが、この Recipe はホームディレクトリ以下に、chef-getting-started.txt を作成するだけのものです。
$ cd getting-started/recipes $ cat default.rb template "#{ENV['HOME']}/chef-getting-started.txt" do source "chef-getting-started.txt.erb" mode "0644" end
source として template ディレクトリにある chef-getting-started.txt.erb が指定されています。
中身を確認してみましょう。
$ cd ../templates/default $ cat chef-getting-started.txt.erb Welcome to Chef! This is Chef version <%= node[:chef_packages][:chef][:version] %>. Running on <%= node[:platform] %>. Version <%= node[:platform_version] %>.
タグで node の属性が指定されています。これは Chef Server 上で確認することができます。
Cookbook の Upload
今回は、この Cookbook をそのまま Chef Server に upload します。
$ cd ~/chef/chef-repo/cookbooks $ knife cookbook upload getting-started -o . Uploading getting-started [0.4.0] Uploaded 1 cookbook.
次にこの Cookbook の中の Recipe を web-server の Node に、Run List として登録しましょう。
コマンドは次のようになります。
$ knife node run_list add web-server "recipe[getting-started]" web-server: run_list: recipe[getting-started]
Chef Server から Run List と Recipe を確認
登録した Run List と Recipe が Chef Server に登録されていることを確認します。
Node から Recipe を実行する
Run List に登録された Recipe を実行するために Node にログインして以下を実行します。
$ sudo chef-client Starting Chef Client, version 11.4.0 [2013-04-22T16:59:10+00:00] INFO: *** Chef 11.4.0 *** [2013-04-22T16:59:11+00:00] INFO: [inet6] no default interface, picking the first ipaddress [2013-04-22T16:59:11+00:00] INFO: Run List is [recipe[getting-started]] [2013-04-22T16:59:11+00:00] INFO: Run List expands to [getting-started] [2013-04-22T16:59:11+00:00] INFO: Starting Chef Run for web-server [2013-04-22T16:59:11+00:00] INFO: Running start handlers [2013-04-22T16:59:11+00:00] INFO: Start handlers complete. resolving cookbooks for run list: ["getting-started"] [2013-04-22T16:59:11+00:00] INFO: Loading cookbooks [getting-started] Synchronizing Cookbooks: - getting-started Compiling Cookbooks... Converging 1 resources Recipe: getting-started::default * template[/root/chef-getting-started.txt] action create[2013-04-22T16:59:11+00:00] INFO: Processing template[/root/chef-getting-started.txt] action create (getting-started::default line 20) (up to date) [2013-04-22T16:59:11+00:00] INFO: Chef Run complete in 0.174993316 seconds [2013-04-22T16:59:11+00:00] INFO: Running report handlers [2013-04-22T16:59:11+00:00] INFO: Report handlers complete Chef Client finished, 0 resources updated
正常に終了したことを確認し、ファイルが作られたか確認します...
$ sudo cat /root/chef-getting-started.txt Welcome to Chef! This is Chef version 11.4.0. Running on amazon. Version 2013.03.
無事作成されていました!
まとめ
今回は、Node の追加と Recipe の実行までを行いました。
すごく簡単なサンプルだったので、Chef の便利さがなかなか実感出来なかったかもしれません。。
次回は、もう少し実用的な Cookbook を使ってみたいと思います。